package com.gccloud.design.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gccloud.design.dto.BwpActivityRepoDto;
import com.gccloud.design.dto.PageObj;
import com.gccloud.design.entity.BwpActivityRepoEntity;
import com.gccloud.design.vo.OptButtonBranchVo;
import com.gccloud.starter.common.vo.R;

import java.util.List;
import java.util.Map;

/**
 * 实现功能：环节组件增删改操作
 *
 * @author xiao.ao
 */
public interface LinkComponentsService extends IService<BwpActivityRepoEntity> {

    /**
     * 新增/修改 保存操作
     *
     * @param bwpActivityRepoDto 环节组件DTO
     */
    void saveActivityRepo(BwpActivityRepoDto bwpActivityRepoDto);

    /**
     * 批量删除环节组件
     *
     * @param ids 主键
     */
    void batchDelete(String ids);

    /**
     * 绑定环节操作
     *
     * @param repoId 环节实例标识
     * @param ids    主键
     */
    void updateActivity(String repoId, String ids);

    /**
     * 取消绑定操作
     */
    void noBindUpdate(String repoId, String ids);

    /**
     * 绑定模板
     *
     * @param repoId 环节实例标识
     * @param id     主键
     */
    void selectForm(String repoId, Integer id);

    /**
     * 取消绑定模板
     *
     * @param repoId 环节实例标识
     * @param id     主键
     * @return R
     */
    R<Object> noBindForm(String repoId, Integer id);

    /**
     * 查询树数据，获取业务类型
     *
     * @return list
     */
    List<Map<String, Object>> getDataByParentId();

    /**
     * 查询环节组件
     *
     * @param bwpActivityRepoDto 环节组件DTO
     * @return map
     */
    Map<String, Object> getDataList(BwpActivityRepoDto bwpActivityRepoDto);

    /**
     * 查询环节绑定操作
     *
     * @param repoId 环节实例ID
     * @return LIST
     */
    List<OptButtonBranchVo> getBind(String repoId);

    /**
     * 获取执行逻辑和补偿逻辑
     *
     * @param type 环节类型
     * @return map
     */
    Map<String, Object> getMethod(String type);

    /**
     * 绑定弹窗查询
     *
     * @param optBranchCode 操作分支编码
     * @param optBranchName 操作分支名称
     * @param pageObj       分页对象
     * @return Map
     */
    Map<String, Object> getBindForm(String repoId, String optBranchCode, String optBranchName, PageObj pageObj);

    /**
     * 获取页面模板
     *
     * @param businessTypeId 业务类型标识
     * @param repoId         环节实例ID
     * @return Map
     */
    Map<String, Object> getForm(Integer businessTypeId, String repoId);

    /**
     * 查重：环节名称
     *
     * @param businessTypeId 业务类型标识
     * @param activityName   环节名称
     * @return boolean
     */
    boolean repeatActivityName(Integer businessTypeId, String activityName, String repoId);

    /**
     * 查询出已绑定的模板
     *
     * @param repoId 环节实例ID
     * @return 环节组件实体
     */
    BwpActivityRepoEntity getOperation(String repoId);

    /**
     * 绑定模板 :查重绑定formId
     *
     * @param repoId 环节实例ID
     * @return 环节组件实体
     */
    BwpActivityRepoEntity checkFormId(String repoId);

    /**
     * 取消模板 :查寻绑定的formId
     *
     * @param repoId 环节实例ID
     * @param formId 表单ID
     * @return 环节组件实体列表
     */
    List<BwpActivityRepoEntity> getFormId(String repoId, Integer formId);
}
